// 调用接口获取token并存储
/*
vuex数据持久化插件  vuex-persistedstate
1:安装  yarn add vuex-persistedstate
2:导入store/index.js   import persistedstate from 'vuex-persistedstate'
3:配制
   {
     state,
     mutations,
     actions,
     getters,
     modules,
     plugins:插件的使用
     [persistedstate({
          paths:['user.token']
     })]
   }

*/

import { sysLogin } from '@/api/login'
import { sysProfile, sysUser } from '@/api/user'
import { syncRoutes, constantRoutes } from '@/router/index'

import router from '@/router'
// import router from '@/router'
import { resetRouter } from '@/router'
const state = {
  // token: localStorage.getItem('hrtoken') || '' // 为什么要把token存储到vuex  规范，共享数据就应该放vuex
  token: '',
  test: 'user模块',
  userInfo: ''
  // 传统方式：将值存储localstorage
}
const mutations = {
  setToken(state, value) {
    state.token = value
    // localStorage.setItem('hrtoken', value)
  },
  setTest(state, value) {
    state.test = value
  },
  // 修改用户信息
  setUserInfo(state, value) {
    state.userInfo = value
  },
  // 退出清空用户信息与token
  logout(state) {
    state.token = ''
    state.userInfo = ''
    // 重置路由
    resetRouter()
  }
}
const actions = {
  async toLogin({ commit }, value) {
    const res = await sysLogin(value)
    // 存储token
    commit('setToken', res.data)
    // console.log(3)
    // console.log(res)
  },
  // 调用api获取用户信息并存储
  async getUserInfo({ commit }) {
    // try {
    // 获取用户名用户id等数据
    const res = await sysProfile()
    // 获取用户头像等数据
    const res2 = await sysUser(res.data.userId)
    // console.log('res2', res2)
    // res.data   res2.data
    // 合并对象  {...res.data,...res2.data}
    // 返回值（合并后的对象）= Object.assign(目标对象,需要合并的对象,.....)
    const res3 = Object.assign({}, res.data, res2.data)
    commit('setUserInfo', res3)
    // 一定拿到了权限数据
    /*
  let arr1=[2]   let arr2= [{xxx:1},{xxx:2},{xxx:3}]   [{xxx:2}]
  */
    // const arr1 = [2]
    // const arr2 = [{ xxx: 1 }, { xxx: 2 }, { xxx: 3 }]
    // const arr3 = arr2.filter((item) => {
    //   if (arr1.includes(item.xxx)) {
    //     return true
    //   }
    // })
    // console.log('arr3', arr3)
    // 动态路由 syncRoutes   用户信息内的权限数据  res3.roles.menus
    const newArr = syncRoutes.filter((item) => {
      return res3.roles.menus.includes(item.meta.name)
    })
    // 将404匹配放到最后
    newArr.push({ path: '*', redirect: '/404', hidden: true })
    router.addRoutes(newArr)
    // 同步到routes模块内
    // actions调用其它模块的mutations  commit('模块名/方法名',实参,{root:true})
    commit('routes/setRoutesList', [...constantRoutes, ...newArr], {
      root: true
    })

    console.log('newArr', newArr)

    // console.log(3)
    // console.log('用户信息', res)
    // } catch (error) {
    //   console.dir(error)
    // }
  }
}
const getters = {}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}
